/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufc.quixada.adrs.comandos.supervisor;

import br.ufc.quixada.adrs.interfaces.Comando;
import br.ufc.quixada.adrs.model.Contato;
import br.ufc.quixada.adrs.model.Endereco;
import br.ufc.quixada.adrs.model.Supervisor;
import br.ufc.quixada.adrs.model.Usuario;
import br.ufc.quixada.adrs.service.ContatoService;
import br.ufc.quixada.adrs.service.EstadoService;
import br.ufc.quixada.adrs.service.MunicipioService;
import br.ufc.quixada.adrs.service.SupervisorService;
import br.ufc.quixada.adrs.service.UsuarioService;
import br.ufc.quixada.adrs.util.Msg;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Franklin
 */
public class CmdSupervisorAlterarCadastro implements Comando {

    public String executa(HttpServletRequest request, HttpServletResponse response) {
        HttpSession session = request.getSession();
        if (request.getParameter("concluded").equals("true")) {

            Supervisor user = (Supervisor) session.getAttribute("user");

            SupervisorService supervisorService = new SupervisorService();
            Supervisor supervisor = supervisorService.getSupervisorById(user.getId());

            String nome = (String) request.getParameter("nome");
            String apelido = (String) request.getParameter("apelido");
            String cpf = (String) request.getParameter("cpf");
            String rg = (String) request.getParameter("rg");
            String email = (String) request.getParameter("email");
            String login = user.getUsuario().getLogin();
            String senha = user.getUsuario().getSenha();
            String estado = (String) request.getParameter("estado");
            String cidade = (String) request.getParameter("cidade");
            String localidade = (String) request.getParameter("localidade");
            String tel1 = (String) request.getParameter("tel1");
            String tel2 = (String) request.getParameter("tel2");

            supervisor.getUsuario().setNome(nome);
            supervisor.getUsuario().setApelido(apelido);
            supervisor.getUsuario().setCpf(cpf);
            supervisor.getUsuario().setRg(rg);
            supervisor.getUsuario().setEmail(email);
            supervisor.getUsuario().setLogin(login);
            supervisor.getUsuario().setSenha(senha);
            supervisor.getUsuario().getContatos().get(0).setNumero(tel1);
            supervisor.getUsuario().getContatos().get(1).setNumero(tel2);

            if (cpf.length() < 14) {
                session.setAttribute("erro", Msg.INPUT_ERROR_INVALID_CPF);
                session.setAttribute("supervisor", supervisor);
                return "/supervisor/supervisor_alterar_cadastro.jsp";
            }
            if (tel1 == null || tel1.trim().equals("")) {
                session.setAttribute("erro", Msg.REQUIRED_PHONE_FIELD_1);
                session.setAttribute("supervisor", supervisor);
                return "/supervisor/supervisor_alterar_cadastro.jsp";
            }
            if (tel2 == null || tel2.trim().equals("")) {
                tel2 = "não informado";
            }
            if (rg == null || email == null || cpf == null || apelido == null || nome == null || login == null || senha == null || localidade == null
                    || cidade == null || estado == null || apelido.trim().isEmpty() || cpf.trim().isEmpty()
                    || rg.trim().isEmpty() || email.trim().isEmpty() || nome.trim().isEmpty() || login.trim().isEmpty() || senha.trim().isEmpty() || localidade.trim().isEmpty()
                    || cidade.trim().isEmpty() || estado.trim().isEmpty()) {

                session.setAttribute("erro", Msg.REQUIRED_FIELDS);
                session.setAttribute("supervisor", supervisor);
                return "/supervisor/supervisor_alterar_cadastro.jsp";
            } else {
                UsuarioService usuarioService = new UsuarioService();
                MunicipioService municipioService = new MunicipioService();

                Endereco e = supervisor.getUsuario().getEndereco();
                e.setDistanciaSede(0);
                e.setLocalidade(localidade);
                e.setMunicipio(municipioService.getMunicipioById(Long.parseLong(cidade)));

                Usuario usuario = supervisor.getUsuario();
                usuario.setNome(nome);
                usuario.setCpf(cpf);
                usuario.setApelido(apelido);
                usuario.setLogin(login);
                usuario.setSenha(senha);
                usuario.setEndereco(e);
                usuario.setEmail(email);
                usuario.setRg(rg);
                ArrayList contatos = new ArrayList<Contato>();

                Contato cont1 = new Contato();
                cont1.setNumero(tel1);
                cont1.setUsuario(usuario);
                cont1.setId(supervisor.getUsuario().getContatos().get(0).getId());
                contatos.add(cont1);
                Contato cont2 = new Contato();
                cont2.setNumero(tel2);
                cont2.setUsuario(usuario);
                try {
                    cont2.setId(supervisor.getUsuario().getContatos().get(1).getId());
                } catch (Exception ex) {
                    cont2.setId(null);
                }
                contatos.add(cont2);
                usuario.setContatos(contatos);

                String validationMsg = usuarioService.validaParaEdicao(usuario);
                if (!validationMsg.equals(Msg.OK)) {
                    session.setAttribute("erro", validationMsg);
                    session.setAttribute("supervisor", supervisor);
                    return "/supervisor/supervisor_alterar_cadastro.jsp";
                }

                if (usuarioService.updateUsuario(usuario)) {
                    session.setAttribute("user", supervisorService.getSupervisorById(user.getId()));
                    session.setAttribute("sucesso", Msg.SUCCESSFULLY_EDITED);
                } else {
                    session.setAttribute("erro", Msg.OPERATIONAL_ERROR_EDITING);
                    session.setAttribute("supervisor", supervisor);
                    return "/supervisor/supervisor_alterar_cadastro.jsp";
                }

                return "/supervisor/supervisor_index.jsp";
            }
        } else {
            Supervisor supervisor = new SupervisorService().getSupervisorById(((Supervisor) session.getAttribute("user")).getId());

            session.setAttribute("supervisor", supervisor);
            session.setAttribute("estados", new EstadoService().getAllEstados());
            session.setAttribute("municipios", new MunicipioService().getAllMunicipios());
            return "/supervisor/supervisor_alterar_cadastro.jsp";
        }
    }
}
